/* /**
 * 元字符
 * 正则表达式是用来匹配自字符串的
 */

 //

  
/*  元字符   表示的式除了：\n以外的任意一个字符 “fds”
 [] 表示一个范围 1-7： [1-7]
                a-z: [a-z]
                A-Z: [A-Z]
    所有的字母:[a-zA-Z]
    所有数字，字母，其中的一个[0-9a-zA-Z]
    把正则表达式中元字符的意义取消掉 [[][]] == '[]'
                                   [.] == '.'
    
  | 或者  [0-9] | [a-z] 要么为数字，要么为小写字母
        
  () 分组 ([0-9])([a-z])([A-Z]) 三组，左边开始运算
      提升优先级 [0-9]|([a-z])|[A-Z] 此段有限匹配 [a-z]
 
  限定符 ： 限定符号出现的次数
 q
  * 表示前面的表达式出现了 0 次到多次
    [a-z][0-9]* 一个字母后面一一个或多个数字
  
  + 表示前面的表达式出现了一次到多次
    [a-z][0-9]+ 一个小写字母后面出现多个数字
 
  ? 前面的表达式出现 0次到 1次，最少是 0次，最多是 1次
   [4][a-z]? "1231234ij"
    阻止贪婪模式： 
  {}
    {0,} 前面的表达式出现 0次到多次  *
    {1,} 前面的表达式出现了1次到多次  +
    {0，1} 前面的表达式出现了 0次到 1次 ?
    {4，5} 前面的表达式出现了 4-5次
    {4} 前面的表达式出现了4次
  ^ 
    表示以什么开始，或者取非
    ^[0-9] 以数字开头
    ^[a-z] 以小写字母开头
    [^a-z] 非小写字母
    [^0-9] 非数字
    [^0-9a-zA-Z_] 非数字字母 
  $
    表示以什么结束
    [a-z]$ 必须以小写字母结束
  
  \d
    数字中的任意一个
    ((http)://[0-9]{3}([.][0-9]{0,3}){3}([/][0-9a-zA-Z-]+)+([.]jpg))
  \D 
    非数字中的一个
  \w 
    非特殊符号
  \W 
    体术符号
  \s
    空白
  \S
    不空白 
  \b 单词边界
 
  \g 全局匹配获取内容
  

 
    * 匹配身份证 15 或 18 位
    * ([1-9][0-9]{16}) | ([1-9][0-9]{16}[0-9xX])
    * 
    * ([1-9][0-9]{14})([0-9]{2}[0-9xX])?
    * 
    */

    /**
     * 匹配座机 010-19876754 0431-87123490
     * ([0][0-9]{2,3})[-]([0-9]{8})
     * [0]\d{3,4}[-]\d{8}
     */

     /**
      * 手机号码匹配
      * ^/d{11}
      */

      /**
       * 邮箱 xxxxx@xx.com.cn
       * 
       * (\w+.)+[@](\w+)(.\w+){1,2}
       */

   /**
    * 创建正则表达式对象
    * var reg = new RegExp()
    */

    var reg = new RegExp(/^\w+[@]\w+([.]\w+){1,2}$/)
    var str = 'war3hacdsadask@212.com'
    var result = reg.test(str)
    // console.log('邮箱')
    console.log('邮箱: '+result)


    /**
     * 识别正则表达式是否匹配
     * 
     */
    var reg1 = /[a-zA-z]*/
    console.log(reg1.test('hello'))
    
    /**
     * 正则匹配并且取值
     * /g 全局匹配
     */

     var str = '中国移动10086，中国电信10010，中国联通 10000'
     var result = str.match(/(\d{5})/g)
     console.log(result)

     /**
      * 提取日期
      * 组提取 使用RegExp.$组号 来提取需要的组
      */
     var str = '2017-11-12'
     var array = str.match(/(\d{4})[-](\d{2})[-](\d{2})/g)
     console.log(RegExp.$1) 

     var str2 = 'war3hack@qq.com'

     str2.match(/(\w+)[@](\w+)(([.]\w+){1,2})/)

     console.log(RegExp.$1)
     console.log(RegExp.$2)
     console.log(RegExp.$3)

     /**
      * 替换字符串
      * 
      */

      var str = "我好丑，真的太丑了"

      str = str.replace(/丑/g,"帅")
      console.log(str)
      /**
       * 去除字符串之间的空格
       * 
       */
      var str3 = "1 2 3 4 5 6 7 8"
      str3 =  str3.replace(/\s+/g,'')
      console.log(str3)
      
      /**
       * RegExp的 exec方法 
       */
      var str4 = '中国移动10086，中国电信10010，中国联通 10000'
      
      var reg = /(\d{5})/g

        var arr2 = str4.match(reg)
        console.log(arr2)
      var res = reg.exec(str4)
      while(res != null){
          console.log(res)
          res = reg.exec(str4)
      }
     
